# 函数式编程

函数式编程是一种编程范式,它强调将程序构建为函数的组合,主要通过函数来完成计算,而不是通过状态的改变或可变数据。

# 一、惰性函数

惰性函数(Lazy Function)是一种通过自覆盖机制实现动态优化的编程技术。其核心机制是在首次调用时执行初始化逻辑,并在此过程中将函数自身替换为优化后的版本。该技术通过消除重复的条件判断,有效提升后续调用时的执行效率。

# 全局变量版

问题

  • 全局变量污染
  • 每次调用都进行条件检查
var t;  // 污染全局命名空间
function foo() {
  if (t) return t;  // 每次调用都需判断
  t = new Date()
  return t;
}

# 闭包封装版

改进

  • ✅ 解决全局污染问题
  • ❌ 保留重复判断缺陷
var foo = (function () {
  var t;  // 闭包存储状态
  return function () {
    if (t) return t;  // 判断仍在每次调用时执行
    t = new Date();
    return t;
  }
})();

# 函数属性版

函数也是一种对象,利用这个特性,我们也可以解决这个问题。

特点

  • ✅ 避免全局污染
  • ❌ 仍然需要重复判断
function foo() {
  if (foo.t) return foo.t;  // 使用函数自身属性
  foo.t = new Date();
  return foo.t;
}

# 惰性函数版

惰性函数通过自覆盖机制动态优化执行逻辑,其核心原理是在首次调用时完成条件判断并重写自身,从而消除后续调用中的重复检测,提升执行效率。

核心机制

  • 函数自更新:首次调用后函数被替换为优化版本。
  • 单次判断:后续调用直接返回缓存值。
var foo = () => {
  const t = new Date();    // 初始化操作
  foo = () => t;           // 重写函数体
  return foo();            // 返回结果
};

# Reference